# -*- coding: utf-8 -*-
import json
from openai import OpenAI
from industryClassLib import allIndustryClass3

class agentIndustryClass3C1Other():
    def __init__(self):
        self.client = OpenAI(api_key="sk-de3197a618e3436f8a76b482a17da844", base_url="https://api.deepseek.com/beta")

    def run(self, companyName, product, business, industry):
        # 输入整理
        if not product:
            product = "未提及"
        if not business:
            business = "未提及"
        if not industry:
            industry = "未提及"
        systemPrompt = """
# 角色
行业分析专家

# 技能
1.具有丰富的行业分析的背景知识；
2.擅长根据提供的信息，准确的分析出公司产品所归属的行业标签； 

# 公司产品格式
以“;”分割多个产品，每个产品格式为“产品名（产品概述）”，当产品概述不存在时，格式为“产品名”。

# 行业分类标签格式
以“|”依次拼接第一级、第二级、第三级标签，行业细分程度由粗到细，第一级、第二级和第三级都限定了该标签的行业范围和含义。

# 行业分类标签表
%s

# 归属要求
1. **选择归属的标签**：产品归属标签需要同时满足以下条件：
(1) 产品与标签具有明显的归属关系，包括但不限于产品定位、应用场景、技术特性和行业标准；        
(2) 标签的第一级、第二级和第三级涉及的行业范围都符合'主营业务'和'主要行业'，且与'公司名称'有相关性；
(3) 产品在'主营业务'和'主要行业'中的应用场景，符合标签的行业场景；
2. **区分归属标签的强弱**：判断标签涉及的产品在'公司产品'的数量的占比，并标记为“强”或“弱”：
(1) “强”表示该标签与多数产品有归属关系；
(2) “弱”表示该标签与少数产品有归属关系；

# 指令
1.结合'公司名称'、'主营业务'和'主要行业'的含义，理解每个'公司产品'是在该含义所涉及的行业范围内的产品；
2.理解指定的'行业分类标签表'中每个标签的含义；
3.对每个'行业分类标签表'与每个'公司产品'按照'归属要求'选择归属的标签，并区分归属标签的强弱；
4.按照JSON格式输出公司产品所归属的行业标签，JSON格式为“{"行业标签1":"强/弱","行业标签2":"强/弱","解释":"行业标签1:列举一个产品归属该标签，行业标签2:列举一个产品归属该标签"}”，请确保输出的内容格式正确和内容准确。

# 特例输出
1. 如果公司是教育、课程、培训为主的公司，不需要输出课程内容相关的标签，只输出标签"其他|租赁与商务服务|教育培训"；
2. 如果公司是贸易、商贸、外贸、销售、电商为主的公司，不需要输出设备或制造相关的标签，只需要输出"其他|批发与零售服务"类别下的标签；
3. 如果'公司产品'或'主营业务'是工商登记的“经营范围”，需要结合'公司行业'判断其中最相关的业务，只需对最相关的业务输出最多10个最相关的标签，说明：判断是工商登记的“经营范围”，一般以“一般项目：”为开头，涉及的内容以“国民经济行业分类”来划分和描述经营范围；

# 注意
1. 当归属的标签没有对应的产品时，删除该标签；
2. 有一个及以上产品对应的标签，都需要输出；
3. 必须使用'行业分类标签表'中的标签，严禁创造新标签；
4. 当归属的标签超过10个时，选择与'主营业务'和'主要行业'相关性高的10个标签作为结果；
5. 没有归属的标签时，输出空JSON。

# 示例
## 公司名称示例
广州市虎头电池集团股份有限公司

## 公司产品示例
大号碱性电池（持久耐用绿色环保）;五号碱性电池（持久耐用绿色环保）;七号碱性电池（持久耐用绿色环保）;九伏碱性电池（持久耐用绿色环保）;大号高功率电池（燃气炉热水器适用）;五号高功率电池（充足电力美观实用）;汽车蓄电池（汽车电瓶蓄电池免维护）

## 主营业务示例
广州市虎头电池集团股份有限公司是中国干电池行业的骨干企业，拥有自营进出口权，年销售干电池超60亿只，外贸额超4亿美元，其销量、出口量、出口额、业务收入等在中国干电池行业名列前茅，名列中国对非洲出口企业百强榜第7位。公司主要产品有干电池系列、蓄电池系列、电池原材料系列、照明系列、电池用电器具系列、应急电源系列、太阳能系列、运动品系列、日用品系列和食品系列等十大系列的产品。公司致力于提供持久耐用、绿色环保的电池产品，满足各种应用需求，包括家庭、工业和特殊用途。

## 主要行业示例
广州市虎头电池集团股份有限公司属于电池制造行业，专注于干电池和蓄电池的生产与销售。公司在电池行业中具有显著的市场地位和影响力，产品广泛应用于家庭、工业、照明、应急电源等多个领域。公司还涉及电池原材料、电池用电器具、太阳能产品等多个细分行业，是中国对非洲出口企业百强榜中的重要成员。

## 输出示例
{"精密机械|电气设备|电池制造":"强","汽车产业|新能源汽车零部件|新能源动力电池制造":"弱","解释":"电池制造:五号碱性电池；新能源动力电池制造:汽车蓄电池"}""" % (str(self.industryClass))

        words = """
# 公司名称
%s

# 公司产品
%s

# 主营业务
%s

# 主要行业
%s

请按照'指令'，输出公司产品所归属的行业标签。""" % (companyName, product, business, industry)
        # print(f'{systemPrompt}')
        # print(f'{words}')
        response = self.client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {'role': 'system', 'content': f'{systemPrompt}'},
                {'role': 'user', 'content': f'{words}'}],
            temperature=0.1,
            response_format={"type": "json_object"},
            max_tokens=8192
        )
        res = {}
        try:
            res = json.loads(response.choices[0].message.content)
            return res
        except Exception as e:
            log = "[ERROR]agentIndustryClass3C1Other.run(%s): %s"%(companyName, e)
            if res:
                self.logs = self.logs + str(res) + "\n"
            self.logs = self.logs + log + "\n"
            return {}

    def check(self, r):
        res = {}
        for k,v in r.items():
            if k not in self.industryClass:
                log = "[ERROR]agentIndustryClass3C1Other匹配标签幻觉：“%s:%s”"%(k,v)
                self.logs = self.logs + log + "\n"
                continue
            if v not in ["强", "弱"]:
                log = "[ERROR]agentIndustryClass3C1Other匹配强度幻觉：“%s:%s”"%(k,v)
                self.logs = self.logs + log + "\n"
                continue
            res[k] = v
        return res

    def progress(self, industryClass3, companyName, product, business, industry):
        self.logs = ""
        self.industryClass = industryClass3
        res = self.run(companyName, product, business, industry)
        explain = ""
        if "解释" in res:
            explain = res["解释"]
            log = "解释：" + res["解释"]
            self.logs = self.logs + log + "\n"
            del res["解释"]
        res = self.check(res)
        return res, explain, self.logs


if __name__ == "__main__":
    companyName = "宁波聚轩信息科技有限公司"
    product = "轴管通（轴承行业数字化系统）;易紧固（紧固件行业数字化系统）;液压宝（液压行业数字化系统）;大圣SASS云平台;大圣云ERP;大圣云MES;大圣云WMS;大圣机联网系统;供应商协同平台;学习分享平台;大圣PASS云平台;在线表单开发平台;在线报表开发平台;在线大屏开发平台;在线工作流引擎;在线移动端APP开发平台;壁挂式工位机;立式工位机（报工台）;电子看板;手持（PDA）及扫码枪;工业平板;打印机;数采网关"
    business = "宁波聚轩信息科技有限公司专注于制造业数字化管理领域，提供包括ERP、MES、WMS等在内的全面数字化解决方案，致力于帮助中小制造业提升管理水平，提高运营效益，降低制造成本。公司产品涵盖行业数字化系统、云平台、智能硬件等多个领域，通过数据自动化采集、可视化呈现和智能化应用，实现生产过程的精细化管理，提高生产效率和产品质量。"
    industry = "宁波聚轩信息科技有限公司主要涉及信息技术行业，专注于制造业的数字化转型，特别是在工业互联网、智能制造、工业软件开发等领域。公司提供的产品和服务广泛应用于轴承、紧固件、液压、汽车零部件等多个细分行业，帮助企业实现数字化管理和智能化生产。"
    agent = agentIndustryClass3C1Other()
    r, explain,logs = agent.progress(allIndustryClass3, companyName, product, business, industry)
    print(r)
    # print(explain)
    print(logs)
